#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>


struct sockaddr_in* sockaddr_in_set(struct sockaddr_in *sa, const char *ipaddr, int port)
{
	if(!sa) {
		return NULL;
	}

	sa->sin_family = AF_INET;
	sa->sin_port = htons(port);
	if (!inet_aton(ipaddr, &(sa->sin_addr))) {
		return NULL;
	}
	memset(sa->sin_zero, '\0', 8);

	return sa; 
}

struct sockaddr_in* sockaddr_in_new(const char *ipaddr, int port)
{
	struct sockaddr_in *sa = malloc(sizeof(*sa));
	sa = sockaddr_in_set(sa, ipaddr, port);
	return sa;
}

void sockaddr_in_free(struct sockaddr_in *sa)
{
	free(sa);
}

int socket_connect(int sock, struct sockaddr_in *sa)
{
	return connect(sock, (struct sockaddr*)sa, sizeof(struct sockaddr));
}

int socket_bind(int sock, struct sockaddr_in *sa)
{
	return bind(sock, (struct sockaddr*)sa, sizeof(struct sockaddr));
}

int socket_accept(int sock, struct sockaddr_in *sa)
{
	int len = 0;
	return accept(sock, (struct sockaddr*)sa, &len);
}
